/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.db.SqlManager;
import com.exception.DataException;
import com.javabeans.Aula;
import com.javabeans.Grupo;
import com.javabeans.GrupoHorario;
import com.javabeans.Usuario;
/**
 * @author Administrador
 */
public class AdminGrupoHorario implements GrupoHorarioManager{
    private Connection c;

    public AdminGrupoHorario(Connection c){
        this.c = c;
    }
    
    @Override
    public void saveGrupoHorarios(List<GrupoHorario> ghorarios)throws DataException{
        PreparedStatement preSt = null;
        int i = 0;
        String query = "INSERT INTO GRUPO_HORARIO VALUES";
        try{
            for(GrupoHorario gh:ghorarios){
                query += "("+gh.getIdGestion()+","+gh.getIdGrupo();
                query += ","+gh.getIdFacultad()+","+gh.getIdPeriodoDia();
                query += ","+gh.getIdDiaSemana()+","+gh.getIdAula()+"),";
                i++;
            }
            if(i > 0){
                i = query.lastIndexOf(",");
                query = query.substring(0, i);
            }            
            preSt = c.prepareStatement(query);
            preSt.executeUpdate();
        }catch(SQLException e){
            throw new DataException(" AdminGrupoHorario -> saveGrupoHorarios(List<GrupoHorario> ghorarios) err sql = "+e.getMessage());
        }finally{
            SqlManager.closePreSt(preSt);
        }
    }
    
    @Override
    public void eliminarPorGrupo(int idGestion, int idGrupo)throws DataException{
        PreparedStatement preSt = null;
        try{
            String query = "DELETE FROM GRUPO_HORARIO WHERE IDGESTION="+idGestion+" AND IDGRUPO="+idGrupo;
            preSt = c.prepareStatement(query);
            preSt.executeUpdate();
        }catch(SQLException ex){
            throw new DataException(" AdminItinerarioHorario -> eliminarPorItinerarioGrupo(int idItinerarioGrupo) "+ex.getMessage());
        }finally{
            SqlManager.closePreSt(preSt);
        }
    }   
    public List<GrupoHorario> getHorariosGrupos(int idFacultad,int idGestion,int idDocente) throws DataException{
        List<GrupoHorario> ghorarios = new ArrayList<GrupoHorario>();
        ResultSet rs = null;
        PreparedStatement preSt = null;
        try{
            String query = "SELECT G.IDGESTION, G.IDGRUPO, G.NRO_GRUPO";
            query += ", GH.IDPERIODO_DIA, GH.IDDIA_SEMANA";
            query += ", A.NRO, A.DESCRIPCION";
            query += " FROM GRUPO_HORARIO GH";
            query += " INNER JOIN GRUPO G ON GH.IDGESTION=G.IDGESTION AND GH.IDGRUPO=G.IDGRUPO AND G.IDDOCENTE="+idDocente;
            query += " INNER JOIN AULA A ON GH.IDAULA=A.IDAULA";
            query += " WHERE GH.IDGESTION="+idGestion+" AND GH.IDFACULTAD="+idFacultad;            
            preSt = c.prepareStatement(query);
            rs = preSt.executeQuery();
            while(rs.next()){
                Aula a = new Aula();
                a.setNro(rs.getString("A.NRO"));
                a.setDescripcion(rs.getString("A.DESCRIPCION"));
                GrupoHorario gh = new GrupoHorario();
                gh.setIdGestion(idGestion);
                gh.setIdGrupo(rs.getInt("G.IDGRUPO"));
                gh.setIdFacultad(idFacultad);
                gh.setIdPeriodoDia(rs.getInt("GH.IDPERIODO_DIA"));
                gh.setIdDiaSemana(rs.getInt("GH.IDDIA_SEMANA"));
                gh.setAux(rs.getString("G.NRO_GRUPO"));
                gh.setAula(a);
                ghorarios.add(gh);
            }
        }catch(SQLException e){
            throw new DataException(" AdminGrupoHorario -> getHorariosGrupos(int idFacultad,int idGestion,int idDocente) e = "+e.getMessage());
        }finally{
            SqlManager.closeRs(rs);
            SqlManager.closePreSt(preSt);
        }
        return ghorarios;
    }    
    
    public List<GrupoHorario> getHorariosGruposEst(int idFacultad,int idGestion,int idCarrera, int codSis) throws DataException{
        List<GrupoHorario> ghorarios = new ArrayList<GrupoHorario>();
        ResultSet rs = null;
        PreparedStatement preSt = null;
        try{
            String query = "SELECT G.IDGESTION, G.IDGRUPO, G.NRO_GRUPO";
            query += ", GH.IDPERIODO_DIA, GH.IDDIA_SEMANA";
            query += ", A.NRO, A.DESCRIPCION";
            query += ", CONCAT(U.NOMBRE,' ',U.APELLIDO) NOMBRE_DOC";
            query += " FROM INSCRITO I, GRUPO G";
            query += " INNER JOIN (GRUPO_HORARIO GH INNER JOIN AULA A ON GH.IDAULA=A.IDAULA) ";
            query += " ON G.IDGESTION=GH.IDGESTION AND G.IDGRUPO=GH.IDGRUPO AND GH.IDFACULTAD="+idFacultad;
            query += " INNER JOIN USUARIO U ON G.IDDOCENTE=U.IDUSUARIO";
            query += " WHERE I.IDGESTION=G.IDGESTION AND I.IDGRUPO=G.IDGRUPO AND I.IDGESTION = "+idGestion;
            query += " AND I.IDCARRERA="+idCarrera+" AND I.IDESTUDIANTE="+codSis;            
            preSt = c.prepareStatement(query);
            rs = preSt.executeQuery();
            while(rs.next()){
                Aula a = new Aula();
                a.setNro(rs.getString("A.NRO"));
                a.setDescripcion(rs.getString("A.DESCRIPCION"));
                Grupo g = new Grupo();
                g.setNroGrupo(rs.getInt("G.NRO_GRUPO"));
                Usuario u = new Usuario();
                u.setNombre(rs.getString("NOMBRE_DOC"));
                g.setDocente(u);
                
                GrupoHorario gh = new GrupoHorario();
                gh.setIdGestion(idGestion);
                gh.setIdGrupo(rs.getInt("G.IDGRUPO"));
                gh.setIdFacultad(idFacultad);
                gh.setIdPeriodoDia(rs.getInt("GH.IDPERIODO_DIA"));
                gh.setIdDiaSemana(rs.getInt("GH.IDDIA_SEMANA"));
                gh.setAula(a);
                gh.setGrupo(g);
                ghorarios.add(gh);
            }
        }catch(SQLException e){
            throw new DataException(" AdminGrupoHorario -> getHorariosGruposEst(int idFacultad,int idGestion,int idCarrera, int codSis) e = "+e.getMessage());
        }finally{
            SqlManager.closeRs(rs);
            SqlManager.closePreSt(preSt);
        }
        return ghorarios;
    }
    
    
}
